package vues;

import java.awt.Color;
import java.awt.Component;
import java.io.File;
import java.util.Hashtable;
import java.util.LinkedList;

import javax.swing.DefaultListCellRenderer;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

import logique.administration.Administration;
import logique.administration.SuppressionRoute;
import logique.administration.SuppressionVille;
import logique.reseau.Route;
import logique.reseau.Troncon;
import logique.reseau.Ville;

public class PanelAdministration extends JPanel {

	private static final long serialVersionUID = 5364332519111331351L;
	
	// ATTRIBUTES //
	static public LinkedList<Integer> routeIndexes;
	static public LinkedList<Integer> villeIndexes;
	
	private Administration miseAJour;
	private InterfacePrincipale gps;
	
	// a. panel de modification ville
	private PanelVille panelAdminModifVille;
	
	// d. panel de creation ville
	private PanelVille panelAdminCreaVille;
	
	// c. panel de modification route
	private PanelRoute panelAdminModifRoute;
	
	// f. panel de creation route
	private PanelRoute panelAdminCreaRoute;

	private Hashtable<String, Route> mesRoutes;
	private Hashtable<String, Ville> mesVilles;
	private LinkedList<Troncon> mesTroncons;
	
	private JButton boutonSupprimerRoute;
	private JButton boutonAjouterVille;
	private JButton boutonValider;
	private JButton boutonQuitter;
	private JButton boutonAjouterReseau;
	private JButton boutonSupprimerReseau;
	private JButton boutonEditerVille;
	private JButton boutonSupprimerVille;
	private JButton boutonAjouterRoute;
	private JButton boutonEditerRoute;
	private JLabel labelReseauxDispos;
	private JLabel labelVilleReseau;
	private JLabel labelRouteReseau;
	private JList listeReseaux;
	private JList listeVilles;
	private JList listeRoutes;
	private JScrollPane scrollPaneReseaux;
	private JScrollPane scrollPaneVilles;
	private JScrollPane scrollPaneRoutes;
	
	// METHODS //
	public Ville rechercherVille(String v){
    	for (Ville ville:mesVilles.values()){
			if(ville.getNom().equals(v)){
				return ville;
			}
		}
    	return null;
    }
	
	public Route rechercherRoute(String v){
    	for (Route route:mesRoutes.values()){
			if(route.getNom().equals(v)){
				return route;
			}
		}
    	return null;
    }
	
	public boolean chargerReseau(String reseau){
		if (this.getMAJ().isEmpty()){
			gps.controleur.choisirReseau(reseau);
			
			if (listeReseaux.getModel().getSize()>0){
				//listeReseaux.setSelectedIndex(0);
				mesRoutes = gps.controleur.getReseau().getRoutes();
				mesVilles = gps.controleur.getReseau().getVilles();
				try {
					mesTroncons = gps.controleur.getAllTroncons();
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				//on recupere les villes
				String[] c = new String[mesVilles.size()];
				int i = 0;
				for (Ville v:mesVilles.values()){
					c[i] = v.getNom();
					i++;
				}
				java.util.Arrays.sort(c) ;
				listeVilles.setListData(c);
				
				//on recupere les routes
				String[] c2 = new String[mesRoutes.size()];
				i = 0;
				for (Route r:mesRoutes.values()){
					c2[i] = r.getNom();
					i++;
				}
				java.util.Arrays.sort(c2) ;
				listeRoutes.setListData(c2);
			}	

			return true;
		}else{
			return false;
		}
	}
	
	public void supprimerTroncons(LinkedList<Troncon> aSupprimer){
		//on parcourt toutes les routes
		//et on supprime les troncons
		LinkedList<Troncon> temp;
		
		for (Route r:mesRoutes.values()){
			temp = r.getTroncons();
			temp.removeAll(aSupprimer);
		}
	}
	
	public LinkedList<Troncon> supprimerTronconsParVille(Ville v){
		LinkedList<Troncon> res = new LinkedList<Troncon>();
		//on parcourt tous les troncons
		//ceux qui touchent la ville sont annot�s
		//et supprimes
		for (Troncon troncon:mesTroncons){
			if((troncon.getVille1().equals(v)) || (troncon.getVille2().equals(v))){
				res.add(troncon);
			}
		}
		return res;
	}
	
	public Troncon rechercherTroncon(Route r, Ville v1, Ville v2){
    	for (Troncon troncon:mesTroncons){
			if((troncon.getVille1().equals(v1)) &&(troncon.getVille2().equals(v2)) && (troncon.getRoute().equals(r))){
				return troncon;
			}
		}
    	return null;
    }
	
	public LinkedList<Troncon> getMesTroncons(){
		return mesTroncons;
	}
	
	public Hashtable<String, Route> getMesRoutes(){
		return mesRoutes;
	}
	
	public Hashtable<String, Ville> getMesVilles(){
		return mesVilles;
	}

	public JList getListeVilles(){
		return listeVilles;
	}
	
	public JList getListeRoutes(){
		return listeRoutes;
	}
	
	public InterfacePrincipale getInterfacePrincipale(){
		return gps;
	}
	
	public PanelAdministration(InterfacePrincipale gps) {
		// Enregistrement de la reference sur la fenetre principale
		this.gps = gps;
		
		// Initialisation du panel
		scrollPaneVilles = new JScrollPane();
		listeVilles = new JList();
		labelVilleReseau = new JLabel();
		boutonEditerVille = new JButton();
		boutonSupprimerVille = new JButton();
		boutonAjouterRoute = new JButton();
		labelRouteReseau = new JLabel();
		scrollPaneRoutes = new JScrollPane();
		listeRoutes = new JList();
		boutonEditerRoute = new JButton();
		boutonSupprimerRoute = new JButton();
		boutonAjouterVille = new javax.swing.JButton();
		boutonValider = new JButton();
		boutonQuitter = new JButton();
		scrollPaneReseaux = new JScrollPane();
		listeReseaux = new JList();
		labelReseauxDispos = new JLabel();
		boutonAjouterReseau = new JButton();
		boutonSupprimerReseau = new JButton();
		
		miseAJour = gps.controleur.getAdministration();
		
		this.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

		listeVilles.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent evt) {
				sourisSelectVille(evt);
			}
		});
		
		listeVilles.setName("listeVilles");
		listeVilles.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
		
		scrollPaneVilles.setViewportView(listeVilles);

		this.add(scrollPaneVilles, new org.netbeans.lib.awtextra.AbsoluteConstraints(340, 80, 140, 180));

		labelVilleReseau.setText("Villes du r\u00e9seau:");
		this.add(labelVilleReseau, new org.netbeans.lib.awtextra.AbsoluteConstraints(370, 50, -1, -1));

		boutonEditerVille.setText("Editer");
		boutonEditerVille.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent evt) {
				sourisEditerVille(evt);
			}
		});

		this.add(boutonEditerVille, new org.netbeans.lib.awtextra.AbsoluteConstraints(420, 270, -1, -1));

		boutonSupprimerVille.setText("Supprimer");
		boutonSupprimerVille.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent evt) {
				sourisSupprimerVille(evt);
			}
		});

		this.add(boutonSupprimerVille, new org.netbeans.lib.awtextra.AbsoluteConstraints(370, 300, -1, -1));

		boutonAjouterRoute.setText("Ajouter");
		boutonAjouterRoute.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent evt) {
				sourisAjouterRoute(evt);
			}
		});

		this.add(boutonAjouterRoute, new org.netbeans.lib.awtextra.AbsoluteConstraints(590, 270, -1, -1));

		labelRouteReseau.setText("Routes du r\u00e9seau:");
		this.add(labelRouteReseau, new org.netbeans.lib.awtextra.AbsoluteConstraints(620, 50, -1, -1));

		listeRoutes.setName("listeRoutes");
		listeRoutes.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent evt) {
				sourisSelectRoute(evt);
			}
		});

		listeRoutes.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
		
		scrollPaneRoutes.setViewportView(listeRoutes);

		this.add(scrollPaneRoutes, new org.netbeans.lib.awtextra.AbsoluteConstraints(590, 80, 140, 180));

		boutonEditerRoute.setText("Editer");
		boutonEditerRoute.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent evt) {
				sourisEditerRoute(evt);
			}
		});

		this.add(boutonEditerRoute, new org.netbeans.lib.awtextra.AbsoluteConstraints(670, 270, -1, -1));

		boutonSupprimerRoute.setText("Supprimer");
		boutonSupprimerRoute.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent evt) {
				sourisSupprimerRoute(evt);
			}
		});

		this.add(boutonSupprimerRoute, new org.netbeans.lib.awtextra.AbsoluteConstraints(620, 300, -1, -1));

		boutonAjouterVille.setText("Ajouter");
		boutonAjouterVille.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent evt) {
				sourisAjouterVille(evt);
			}
		});

		this.add(boutonAjouterVille, new org.netbeans.lib.awtextra.AbsoluteConstraints(340, 270, -1, -1));

		boutonValider.setText("Valider");
		boutonValider.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent evt) {
				sourisValiderChangements(evt);
			}
		});

		this.add(boutonValider, new org.netbeans.lib.awtextra.AbsoluteConstraints(710, 420, -1, -1));

		boutonQuitter.setText("Quitter");
		boutonQuitter.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent evt) {
				sourisQuitter2(evt);
			}
		});

		this.add(boutonQuitter, new org.netbeans.lib.awtextra.AbsoluteConstraints(610, 420, -1, -1));

		listeReseaux.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent evt) {
				sourisSelectReseau(evt);
			}
		});

		listeReseaux.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
		
		scrollPaneReseaux.setViewportView(listeReseaux);

		this.add(scrollPaneReseaux, new org.netbeans.lib.awtextra.AbsoluteConstraints(70, 80, 160, 180));

		labelReseauxDispos.setText("R\u00e9seaux disponibles:");
		this.add(labelReseauxDispos, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 50, -1, -1));
		
		boutonAjouterReseau.setText("Ajouter");
		boutonAjouterReseau.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent evt) {
				sourisAjouterReseau(evt);
			}
		});

		this.add(boutonAjouterReseau, new org.netbeans.lib.awtextra.AbsoluteConstraints(70, 270, -1, -1));

		boutonSupprimerReseau.setText("Supprimer");
		boutonSupprimerReseau.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent evt) {
				sourisSupprimerReseau(evt);
			}
		});

		this.add(boutonSupprimerReseau, new org.netbeans.lib.awtextra.AbsoluteConstraints(150, 270, -1, -1));

		//on load les reseaux deja preferes
		LinkedList<String> listeRes = gps.controleur.reseauxDisponibles();
		String[] cRes = new String[listeRes.size()];
		int i = 0;
		for (String res:gps.controleur.reseauxDisponibles()){
			cRes[i] = res;
			i++;
		}
		listeReseaux.setListData(cRes);
		if (cRes.length >0){
			gps.controleur.choisirReseau(cRes[0]);
		}
		
		if (listeReseaux.getModel().getSize()>0){
			listeReseaux.setSelectedIndex(0);
			mesRoutes = gps.controleur.getReseau().getRoutes();
			mesVilles = gps.controleur.getReseau().getVilles();
			try {
				mesTroncons = gps.controleur.getAllTroncons();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			//on recupere les villes
			String[] c = new String[mesVilles.size()];
			i = 0;
			for (Ville v:mesVilles.values()){
				c[i] = v.getNom();
				i++;
			}
			java.util.Arrays.sort(c) ;
			listeVilles.setListData(c);
			
			//on recupere les routes
			String[] c2 = new String[mesRoutes.size()];
			i = 0;
			for (Route r:mesRoutes.values()){
				c2[i] = r.getNom();
				i++;
			}
			java.util.Arrays.sort(c2) ;
			listeRoutes.setListData(c2);
		}	
	}
	
	private void sourisSelectRoute(java.awt.event.MouseEvent evt) {
		//on parcourt
		LinkedList<String> listeAAllumer = new LinkedList<String>();

		Route r = rechercherRoute((String)listeRoutes.getSelectedValue());	
		//on recupere toutes les villes qui y sont reliees
		for (Troncon troncon:r.getTroncons()){
			//on doit mettre les 2 villes en surbrillance
			listeAAllumer.add(troncon.getVille1().getNom());			
			listeAAllumer.add(troncon.getVille2().getNom());			
		}
		
		int size = listeAAllumer.size();
		listeVilles.setCellRenderer(new ColoredRenderer());
		villeIndexes = new LinkedList<Integer>();
		int var = 0;
		
		for (int i=0; i<size; i++){
			listeVilles.setSelectedValue(listeAAllumer.get(i), true);
			var = listeVilles.getSelectedIndex();
			if (var >=0){
				villeIndexes.add((Integer) var);
			}
		}
		
	}

	private void sourisSelectVille(java.awt.event.MouseEvent evt) {
		Ville v = rechercherVille((String)listeVilles.getSelectedValue());
		LinkedList<String> listeAAllumer = new LinkedList<String>();
		
		//on recupere toutes les routes qui y sont reliees
		for (Route route:mesRoutes.values()){
			for (Troncon troncon:route.getTroncons()){
				if ((troncon.getVille1().getNom().equals(v.getNom()))||(troncon.getVille2().getNom().equals(v.getNom()))){
					//on doit mettre la route en surbrillance
					listeAAllumer.add(route.getNom());
					break;
				}
			}
		}
		
		int size = listeAAllumer.size();
		listeRoutes.setCellRenderer(new ColoredRenderer());
		routeIndexes = new LinkedList<Integer>();
		int var = 0;
		
		for (int i=0; i<size; i++){
			listeRoutes.setSelectedValue(listeAAllumer.get(i), true);
			var = listeRoutes.getSelectedIndex();
			if (var >=0){
				routeIndexes.add((Integer) var);
			}
		}
	}

	//classe utilisee pour la coloration des listes de villes et de routes lors d'une selection
	private static final class ColoredRenderer extends DefaultListCellRenderer
    {
        private final Color BG = Color.blue;
 
        public Component getListCellRendererComponent(JList list,
                                                      Object value,
                                                      int index,
                                                      boolean isSelected,
                                                      boolean hasFocus)
        {
            final Component c = super.getListCellRendererComponent(list,
                                                                   value,
                                                                   index,
                                                                   isSelected,
                                                                   hasFocus);
            
            
            if (list.getName().equals("listeVilles")){
	            if (PanelAdministration.villeIndexes.contains(index)){
	            	c.setBackground(BG);
	            }
            }else{
            	if (list.getName().equals("listeRoutes")){
	            	if (PanelAdministration.routeIndexes.contains(index)){
	            		c.setBackground(BG);
	            	}
            	}
            }
            return c;
        }
    }

	private void sourisSelectReseau(java.awt.event.MouseEvent evt) {
		//on verifie le chargement du reseau
		gps.controleur.choisirReseau((String)listeReseaux.getSelectedValue());
		
		if (!this.getInterfacePrincipale().panelNavigation.isSurLaRoute()){
			mesVilles = gps.controleur.getVilles();	
			mesRoutes = gps.controleur.getRoutes();
			try {
				mesTroncons = gps.controleur.getAllTroncons();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			//on recupere les villes
			String[] c = new String[mesVilles.size()];
			int i = 0;
			for (Ville v:mesVilles.values()){
				c[i] = v.getNom();
				i++;
			}
			listeVilles.setListData(c);
			
			//on recupere les routes
			String[] c2 = new String[mesRoutes.size()];
			i = 0;
			for (Route r:mesRoutes.values()){
				c2[i] = r.getNom();
				i++;
			}
			listeRoutes.setListData(c2);
			
	        this.gps.panelPrefSimples.modifierReseauAdmin((String)listeReseaux.getSelectedValue());
		}else{
			JOptionPane.showMessageDialog(this, "Un utilisateur est actuellement en voyage sur ce réseau, vous devez attendre la fin de sa navigation");
		}
	}

	public Administration getMAJ(){
		return miseAJour;
	}
	
	private void sourisValiderChangements(java.awt.event.MouseEvent evt) {
		enableAll(false);
		miseAJour.valideModifications();
	}

	private void sourisSupprimerRoute(java.awt.event.MouseEvent evt) {
//		on recupere le contenu courant de la liste et on y enleve la valeur selectionnee
		int size = listeRoutes.getModel().getSize();
		int index = listeRoutes.getSelectedIndex();
		
		if (size > 0 && index>=0){
//			route a supprimer
			Route r = rechercherRoute((String)listeRoutes.getSelectedValue());
			miseAJour.ajoutModification(new SuppressionRoute(r));
			mesRoutes.remove(r.getNom());
			
			String[] l = new String[size-1];
			int indexString = 0;
			for (int i=0; i<size; i++){
				if (i != index){
					l[indexString] = (String) listeRoutes.getModel().getElementAt(i);
					indexString++;
				}
			}
			java.util.Arrays.sort(l) ;
			listeRoutes.setListData(l);
		}
	}

	private void sourisEditerRoute(java.awt.event.MouseEvent evt) {
//		on recupere le nom de la route selectionnee
		listeRoutes.getSelectedIndex();
		String val = (String)listeRoutes.getSelectedValue();
		
		if (val != null){
			
			panelAdminModifRoute = new PanelRoute(this, val);
		}
	}

	private void sourisAjouterRoute(java.awt.event.MouseEvent evt) {
		panelAdminCreaRoute = new PanelRoute(this, "");
	}

	private void sourisSupprimerVille(java.awt.event.MouseEvent evt) {
//		on recupere le contenu courant de la liste et on y enleve la valeur selectionnee
		int size = listeVilles.getModel().getSize();
		int index = listeVilles.getSelectedIndex();
		
		if (size > 0 && index>=0){
//			ville a supprimer
			Ville v = rechercherVille((String)listeVilles.getSelectedValue());
		
			//on supprime tous les troncons qui y sont relies
//			on supprime les troncons de la liste temporaire
			LinkedList<Troncon> aSupprimer = supprimerTronconsParVille(v);
			//et dans toutes les routes on supprime les troncons
			supprimerTroncons(aSupprimer);
			
			mesVilles.remove(v.getNom());
			miseAJour.ajoutModification(new SuppressionVille(v));
			
			String[] l = new String[size-1];
			int indexString = 0;
			for (int i=0; i<size; i++){
				if (i != index){
					l[indexString] = (String) listeVilles.getModel().getElementAt(i);
					indexString++;
				}
			}
			java.util.Arrays.sort(l) ;
			listeVilles.setListData(l);
		}
	}

	private void sourisEditerVille(java.awt.event.MouseEvent evt) {
		//on recupere le nom de la ville selectionnee
		listeVilles.getSelectedIndex();
		String val = (String)listeVilles.getSelectedValue();
		
		if (val != null){
			panelAdminModifVille = new PanelVille(this, val);
		}
	}
		
	private void sourisAjouterVille(java.awt.event.MouseEvent evt) {
		panelAdminCreaVille = new PanelVille(this, "");
	}

	private void sourisSupprimerReseau(java.awt.event.MouseEvent evt) {
//		on recupere le contenu courant de la liste et on y enleve la valeur selectionnee
		int size = listeReseaux.getModel().getSize();
		int index = listeReseaux.getSelectedIndex();
		
		if (size > 0 && index>=0){
			if (!this.getInterfacePrincipale().panelNavigation.isSurLaRoute()){
				String fichier = (String) listeReseaux.getModel().getElementAt(index);
				String[] l = new String[size-1];
				int indexString = 0;
				for (int i=0; i<size; i++){
					if (i != index){
						l[indexString] = (String) listeReseaux.getModel().getElementAt(i);
						indexString++;
					}
				}
				java.util.Arrays.sort(l) ;
				listeReseaux.setListData(l);
			
				listeVilles.setListData(new String[0]);
				listeRoutes.setListData(new String[0]);
				
				File f=new File(fichier);
				f.delete();
			    this.gps.panelPrefSimples.supprimerReseauAdmin(fichier, null);
			}else{
				JOptionPane.showMessageDialog(this, "Un utilisateur est actuellement en voyage sur ce réseau, vous devez attendre la fin de sa navigation");	
			}
		}
	}

	private void sourisAjouterReseau(java.awt.event.MouseEvent evt) {
		//on choisit et on parse le nouveau reseau
		try {
			File rF = gps.controleur.importReseau();
			
			if(rF != null){
				gps.controleur.choisirReseau(rF.getAbsolutePath());
				
				if (!this.getInterfacePrincipale().panelNavigation.isSurLaRoute()){
					mesVilles = gps.controleur.getVilles();	
					mesRoutes = gps.controleur.getRoutes();
					mesTroncons = gps.controleur.getAllTroncons();
					
					//on recupere les villes
					String[] c = new String[mesVilles.size()];
					int i = 0;
					for (Ville v:mesVilles.values()){
						c[i] = v.getNom();
						i++;
					}
					listeVilles.setListData(c);
					
					//on recupere les routes
					String[] c2 = new String[mesRoutes.size()];
					i = 0;
					for (Route r:mesRoutes.values()){
						c2[i] = r.getNom();
						i++;
					}
					listeRoutes.setListData(c2);
					
					//on ajoute le reseau dans l'interface
					int size = listeReseaux.getModel().getSize();  
			        String[] l = new String[size+1];
			        l[0]= gps.controleur.getReseau().getId();
			        for (int j=0; j<size; j++){
			        	l[j+1] = (String) listeReseaux.getModel().getElementAt(j);
			        }
			        java.util.Arrays.sort(l) ;
			        listeReseaux.setListData(l);
			        
			        this.gps.panelPrefSimples.ajouterReseauAdmin(rF.getAbsolutePath());
				}else{
					JOptionPane.showMessageDialog(this, "Un utilisateur est actuellement en voyage sur ce réseau, vousdevez attendre la fin de sa navigation");
				}
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private void sourisQuitter2(java.awt.event.MouseEvent evt) {
		System.exit(0);
	}
	
	public synchronized void enableAll(boolean val){
		boutonSupprimerRoute.setEnabled(val);
		boutonAjouterVille.setEnabled(val);
		boutonValider.setEnabled(val);
		boutonQuitter.setEnabled(val);
		boutonAjouterReseau.setEnabled(val);
		boutonSupprimerReseau.setEnabled(val);
		boutonEditerVille.setEnabled(val);
		boutonSupprimerVille.setEnabled(val);
		boutonAjouterRoute.setEnabled(val);
		boutonEditerRoute.setEnabled(val);
		labelReseauxDispos.setEnabled(val);
		labelVilleReseau.setEnabled(val);
		labelRouteReseau.setEnabled(val);
		listeReseaux.setEnabled(val);
		listeVilles.setEnabled(val);
		listeRoutes.setEnabled(val);
		scrollPaneReseaux.setEnabled(val);
		scrollPaneVilles.setEnabled(val);
		scrollPaneRoutes.setEnabled(val);
		
	}
}
